import { msg } from './util.js'

// 基础URL  ifndef是判断它是不是H5端  如果是不是则走这个地址BASE_URL的地址
// #ifndef H5
// 非h5端，
let BASE_URL = 'https://mock.mengxuegu.com/mock/616a80429204560704e9fb55'
// #endif

// (注意 :ifndef 则判断value  为false 的时候 则走 )
// (注意 :ifdef  则判断value  为true  的时候 则走)

// h5, 进行代理转发  ifdef 如果是则走 这个H5的BASE  
// #ifdef H5   
// let BASE_URL = '/api' // 'http://39.108.187.100:6001'
// #endif


//加上header请求头
// 1、导入vuex状态
import store from '@/store'

const request = (options = {}) => {
  // 2、判断是否有访问令牌
  const accessToken = store.state.accessToken  //获取vuex状态里面的accessToken 
  if (accessToken) {
    //oauth2协议
    options.header = { 'Authorization': `Bearer ${accessToken}`, 'Content-type': 'application/json' }
  }
  //这里做了一个路由->白名单
  const whileList = ['/auth/login', '/auth/login/provider', '/auth/user/mobile', '/system/sms/code',]

  // resolve 正常响应，reject异常响应
  return new Promise((resolve, reject) => {

    // 恶意路由跳转页面两种方式
    //1、还有一种解决方案就是在请求里面加一个isLogin 登录状态 
    // api里面就要写isLogin:true     
    // if (options.isLogin && !accessToken) {
    //   //跳转到登录页
    //   return uni.navigateTo({
    //     url: '/pages/auth/login'
    //   })
    // }

    //2、这种方式不推荐 有局限性   如果要使用就使用上面的方式 
    //判断请求接口url 包含/api  说明不需要登录
    //如果没有 包含 ， 说明登录才可以访问（accessToken）    
    if (whileList.indexOf(options.url) === -1 && options.url.indexOf('/api/') < 0 && !accessToken) {
      //跳转到登录页
      uni.navigateTo({
        url: '/pages/auth/login'
      })
      return
    }
    uni.request({
      url: BASE_URL + options.url,
      method: options.method || 'GET',
      data: options.data || {},
      header: options.header || {},  //请求头
      timeout: 8000, // 8秒超时时间，单位ms
      success: (res) => {
        // console.log('res', res.data)
        resolve(res.data)
      },
      fail: (err) => {
        // console.log('err', err)
        msg('请求接口失败')
        reject(err)
      }
    })
  })
}

// 导出
export default request